package ciel.debugging;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.mt4j.util.math.Vector3D;

/**
 * Helper-Klasse die das komfortable Loggen von Debugginginformationen erlaubt. Die Klasse kann statisch angesprochen werden 
 * die Ausgabe auf verschiedenen Medien erlaubt.
 * 
 * @author Alexander Bazo
 *
 */
public class CielDebugger {
	
	/**
	 * Kennzeichnet ob die Ausgabe von Debuginformationen an- oder ausgeschaltet ist.
	 */
	private static boolean DebugState = false;
	
	/**
	 * Flags zur Kennzeichnung der der Ausgabemedien 
	 */
	private static final int CONSOLE = 0;
	private static final int FILE = 1;
	private static final int SCREEN = 2;
	
	/**
	 * Setzt den Wert, der bestimmt ob Debuginformationen ausgegeben werden sollen oder nicht.
	 * 
	 * @param debugState Status der Debugausgabe
	 */
	public static void setDebugState(boolean debugState) {
		DebugState = debugState;
	}

	/**
	 * Die Logfunktion ist überladen um auf unterschiedliche Parameter zu reagieren.
	 * Ohne spezifiezierung des Targets wird in die Konsole geschrieben.
	 * @param msg Auszugebende Debugnachricht
	 */
	public static void log(String msg) {
		if(DebugState) {
			writeToConsole(msg);
		}
	}
	
	/**
	 * Gibt einen Vektor auf der Konsole aus. Zusätzlich zu dem Rückgabewert der toString()-Methode aus dem MT4J-Framework
	 * @see Vector3D wird ein Hinweis auf den Vector ausgegeben.
	 * @param vector Auszugebender Vector
	 */
	public static void log(Vector3D vector) {
		if(DebugState) {
			writeToConsole("Vector3D: " + vector);
		}
	}
	
	/**
	 * Log-Methode die durch die Spezifiezierung des Targets das Ausgabemedium bestimmt.
	 * @param msg Auszugebende Debugnachricht
	 * @param target Zieltarget für die Ausgabe, definiert als Konstanten in dieser Klasse
	 */
	public static void log(String msg, int target) {
		if(DebugState) {
		switch (target) {
			case CONSOLE:
				writeToConsole(msg);
				break;
			case FILE:
				break;
			case SCREEN:
				break;
			default:
				break;
		}
		}
	}
	
	/**
	 * Gibt die Debugnachricht auf der Konsole aus
	 * @param msg  Auszugebende Debugnachricht
	 */
	private static void writeToConsole(String msg) {
		System.out.println(new SimpleDateFormat("HH.mm.ss").format(new Date()) + ":\t" + msg);
	}

}
